草庐IT

C++ 对和指针

全部标签

c++ - c/c++关于指针的问题(双指针)

自从我学习c和c++类(class)以来,我对c指针很好奇(我打算在我的示例中使用new关键字,即使我知道malloc是C的方式)。我总是记得我的老师总是强制我们使用指针,她永远不会对数组进行赋值,她向我们证明,当您使用指针而不是使用数组时,汇编语言中需要的命令更少。我想继续这种良好做法,但我似乎很难使用指针,特别是双指针。假设我想在不使用c++字符串数据类型的情况下创建一个词库,并且我有一个char类型的双指针。intmain(){stringfileName="file.txt";char**wordBank=null;intwordCount=countWords(fileNam

c++ - 为什么不将字符串文字作为对数组的引用而不是不透明指针传递?

在C++中,字符串文字的类型是constchar[N],其中N,如std::size_t,是字符数加一(零字节终止符)。它们驻留在静态存储中,从程序初始化到终止都可用。通常,采用常量字符串的函数不需要std::basic_string接口(interface),或者更愿意避免动态分配;例如,他们可能只需要字符串本身及其长度。std::basic_string尤其必须提供一种从语言的native字符串文字构造的方法。这些函数提供了一个采用C风格字符串的变体:voidfunction_that_takes_a_constant_string(constchar*/*const*/s);//

c++ - 我总是可以用常规指针代替输入迭代器吗?

我能否始终以下面代码中示例的方式替换InputIterators的指针?inta[]={5,6,7,8,9,10};std::listl(a,a+4);//5,6,7,8list的构造函数声明是(省略分配器部分)list(InputIteratorfirst,InputIteratorlast);但是从C++引用来看,似乎任何支持++(递增)和*(取消引用)等操作的东西都可以用作InputIterators?谢谢。 最佳答案 C++标准部分§24.2.1[iterator.requirements.general]:Iterator

c++ - 资源管理- vector 和指针

我需要存储ThirdPartyElm类型的元素序列,我使用的是std::vector(或std::array如果我需要一个固定大小的序列)。我想知道我应该如何初始化序列。第一个版本创建一个新元素,并且(如果我是对的)在将元素插入到序列中时创建该元素的拷贝:for(inti=0;i第二个版本存储一系列指针(或更好的c++11智能指针):for(inti=0;ielm(newThirdPartyElm());//initelm..my_vector.push_back(std::move(elm));//my_array[i]=std::move(elm);}哪个是最轻量级的版本?请突出显

C++从成员指针转换回持有类指针

我有以下类(class):classSSVec{public:floatvalues[8];}我有一个对象SSVecobj,我将float*指针obj.values传递给另一个函数。在代码的其他地方,我得到了这个float*指针,然后将它转换回SSVec*指针。这在C++标准定义的行为方式中可能吗?大多数情况下,这将适用于静态转换,但我猜这实际上是未定义的行为。原因是float*指针传入和传出DLL,而DLL对SSVec一无所知。我保证传递的指针始终指向SSVec::value[8]对象成员。该类可能更复杂,但它不派生自任何东西,没有虚函数,并且只包含POD类型。values是第一个成

c++ - 指针,将 char ** 转换为 char *

我正在研究指针,但我被下面的示例程序难住了。它应该是将char**转换为char*,但我不明白程序背后的逻辑。程序在做什么?#includeusingnamespacestd;intmain(){char*notes[]={"cpp","python","java","mariadb"};void*base=notes;//notesandbase,holdstheaddressofnote'sfirstelementvoid*elemAddr=(char*)base+3*sizeof(char*);//ididn'tunderstandthisline???cout

c++ - 将指针 vector 转换为对象 vector

我有这个vector:std::vectorfoo;我有一个具有以下签名的函数(我无法更改它):voidbar(std::vectorconst&);如何以最少的更改将foo传递给该函数?我目前的做法是:std::vectoranother_bar(bar.size());std::transform(std::begin(bar),std::end(bar),std::begin(another_bar),[](T*item){return*T;});我认为这里发生了很多不必要的复制。编辑:T不是模板化参数。它是一个特定的类型。 最佳答案

c++ - C++ 中是否有一种机制可以在没有动态内存分配的情况下从基类指针复制派生类的完整拷贝?

考虑以下示例,其中对象切片发生在基指针的取消引用期间。#includeclassBase{public:virtualvoidhello(){printf("helloworldfrombase\n");}};classDerived:publicBase{public:virtualvoidhello(){printf("helloworldfromderived\n");}};intmain(){Base*ptrToDerived=newDerived;autod=*ptrToDerived;d.hello();}我希望变量d保存类型为Derived的对象,而不是类型为Base的对

c++ - 使用智能指针编写安全的复制构造函数

我想弄清楚是否有可能在std::unique_ptr的帮助下编写一个安全的复制构造函数里面。这是我的代码:#include#includeclassA{public:A():_a(10){std::cerr_a(newA(*tmp.a));std::unique_ptr_b(newB(*tmp.b));a=_a.release();b=_b.release();}~C(){std::cerr这段代码的输出:A()constructorB()constructorC()constructorC()copyconstructorA()copyconstructorB()copyconstr

c++ - 使用父指针的二叉搜索树有什么优点?

到目前为止,我一直在使用左右指针实现二叉搜索树,例如:templatestructBSTNode{BSTNode*left;BSTNode*right;Tdata;}我遇到过节点也有指向父节点的指针的实现。你为什么想这么做?权衡取舍是什么? 最佳答案 从一个角度来看,您的问题是有效的,因为parent指针在结构中引入了冗余,这在几种情况下是可以避免的。但是在二叉树的情况下,这会给你带来巨大的好处,你可以在不记住父节点地址的情况下“向上”跳一级(即从一个节点到它的父节点)。如果节点的父节点已知,可以非常有效和简单地实现多种算法(例如,